///////////////////////////////////////////////////////////////////////////////
//
// lighthouse3D - 3D Software Library
//
// File: CLighting.cpp
//
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2003-2013 Marcus Reinhardt
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
///////////////////////////////////////////////////////////////////////////////
//
// You can find a copy of the GNU General Public License (gpl.txt) in the
// directory of the library.
//
///////////////////////////////////////////////////////////////////////////////
#include "CLighting.h"

///////////////////////////////////////////////////////////////////////////////
// CLighting::CLighting( ... )
///////////////////////////////////////////////////////////////////////////////
CLighting::CLighting()
{
  ambientLight.x = 0;
  ambientLight.y = 0;
  ambientLight.z = 0;
  ambientLight.r = 0;
  ambientLight.g = 0;
  ambientLight.b = 0;
  ambientLight.ia = 0;
  ambientLight.id = 0;
  ambientLight.is = 0;

  ambientLight.lightType = _ambientLight_;  

  dotLights.clear();
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::~CLighting( ... )
///////////////////////////////////////////////////////////////////////////////
CLighting::~CLighting()
{
  dotLights.clear();
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::getDotLightCount( ... )
///////////////////////////////////////////////////////////////////////////////
int CLighting::getDotLightCount()
{
  return(int) dotLights.size();
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::setAmbientLight( ... )
///////////////////////////////////////////////////////////////////////////////
void CLighting::setAmbientLight(TLightSource l)
{
  ambientLight = l;

  ambientLight.x = 0;
  ambientLight.y = 0;
  ambientLight.z = 0;

  ambientLight.lightType = _ambientLight_;  
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::setSpecularPower( ... )
///////////////////////////////////////////////////////////////////////////////
void CLighting::setSpecularPower(int i)
{
  specPower = i;
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::getSpecularPower( ... )
///////////////////////////////////////////////////////////////////////////////
int CLighting::getSpecularPower()
{
  return specPower;
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::addDotLight( ... )
///////////////////////////////////////////////////////////////////////////////
void CLighting::addDotLight(TLightSource &l)
{
  l.lightType = _dotLight_;  

  dotLights.push_back(l);
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::setDotLight( ... )
///////////////////////////////////////////////////////////////////////////////
void CLighting::setDotLight(int i, TLightSource &l)
{
  dotLights[i].x = l.x;
  dotLights[i].y = l.y;
  dotLights[i].z = l.z;
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::setTransformedDotLight( ... )
///////////////////////////////////////////////////////////////////////////////
void CLighting::setTransformedDotLight(int i, TLightSource &l)
{
  dotLights[i].xt = l.xt;
  dotLights[i].yt = l.yt;
  dotLights[i].zt = l.zt;
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::getAmbientLight( ... )
///////////////////////////////////////////////////////////////////////////////
TLightSource *CLighting::getAmbientLight()
{
  return &ambientLight;
}

///////////////////////////////////////////////////////////////////////////////
// CLighting::getDotLight( ... )
///////////////////////////////////////////////////////////////////////////////
TLightSource *CLighting::getDotLight(int i)
{
  return ( ((i < 0) || (i >= getDotLightCount())) ? NULL : &dotLights[i]);
}

